#ifndef FABRECALMACENAMIENTO_H_
#define FABRECDEALMACENAMIENTO_H_
/*
#include "../classes/etg_almacenamiento/Etg_Almacenamiento.h"

#include "../classes/almacenamiento/Almacenamiento.h"
#include "../enums/TipoMemoria.h"
#include "../enums/TipoIndice.h"
#include "../enums/TipoEstrategia.h"
#include "Dato.h"
*/
#include "../../classes/RecursoDeAlmacenamiento.h"

using namespace std;

class FabRecAlmacenamiento {
	
	public:
		//FabRecAlmacenamiento();

		//~FabRecAlmacenamiento();
			
		/**
		 * 
		 * Permite crear un recurso que se almacena en Buffer y que utiliza como indice un Arbol B# 
		 * 
		 * @param TipoMemoria tipoM: define si los registros que vendran por listaDatos son de longitud FIJA o VARIABLE.
		 * @param TipoEstrategia tipoE: define si la estrategia de almacenamiento de los datos son REGISTROS, BLOQUES o TEXTO
		 * @param vector<Dato*> listaDatos: vector que contiene los datos a almacenar en la carga inicial.
		 * 
		 * */
		static RecursoDeAlmacenamiento* recursoBuffer_IndiceArbol(TipoMemoria tipoM, TipoEstrategia tipoE, unsigned int tamB,PrimaryKey *PK);
		
		/**
		 * 
		 * Permite crear un recurso que se almacena en un Archivo (en Disco) y que utiliza como indice un Arbol B# 
		 * 
		 * @param TipoMemoria tipoM: define si los registros que vendran por listaDatos son de longitud FIJA o VARIABLE.
		 * @param TipoEstrategia tipoE: define si la estrategia de almacenamiento de los datos son REGISTROS, BLOQUES o TEXTO
		 * @param vector<Dato*> listaDatos: vector que contiene los datos a almacenar en la carga inicial.
		 * 
		 * */
		static RecursoDeAlmacenamiento* recursoArchivo_IndiceArbol(char *path, TipoMemoria tipoM, TipoEstrategia tipoE,PrimaryKey *PK);
				
		/**
		 * 
		 * Permite crear un recurso que se almacena en Buffer y que utiliza indexacion  
		 * por Dispersion extendida en bloques de registros de dato.  
		 * 
		 * @param TipoMemoria tipoM: define si los registros que vendran por listaDatos son de longitud FIJA o VARIABLE.
		 * @param vector<Dato*> listaDatos: vector que contiene los datos a almacenar en la carga inicial.
		 * 
		 * */
		static RecursoDeAlmacenamiento* recursoBuffer_IndiceHash(TipoMemoria tipoM, unsigned int tamB,PrimaryKey *PK);
		
		/**
		 * 
		 * Permite crear un recurso que se almacena en un Archivo (en Disco) y que utiliza indexacion 
		 * por Dispersion extendida en bloques de registros de dato.  
		 * 
		 * @param TipoMemoria tipoM: define si los registros que vendran por listaDatos son de longitud FIJA o VARIABLE.
		 * @param vector<Dato*> listaDatos: vector que contiene los datos a almacenar en la carga inicial.
		 * 
		 * */
		static RecursoDeAlmacenamiento* recursoArchivo_IndiceHash(char *path, TipoMemoria tipoM,PrimaryKey *PK);
		
		
		/**
		 * 
		 * Permite crear un recurso que se almacena en Archivo y buffer con escritura directa
		 * que utiliza indexacion: Arbol b#.  
		 * 
		 * @param TipoMemoria tipoM: define si los registros que vendran por listaDatos son de longitud FIJA o VARIABLE.
		 * @param TipoEstrategia tipoE: define si la estrategia de almacenamiento de los datos son REGISTROS, BLOQUES o TEXTO
		 * @param vector<Dato*> listaDatos: vector que contiene los datos a almacenar en la carga inicial.
		 * 
		 * */
		static RecursoDeAlmacenamiento* recursoArchivoConBuffer_IndiceArbol(char *path, TipoMemoria tipoM, TipoEstrategia tipoE,  unsigned int tamB,PrimaryKey *PK);
		
		/**
		 * 
		 * Permite crear un recurso que se almacena en Archivo y buffer con escritura directa
		 * que utiliza indexacion: Dispersion extendida en bloques de registros de dato.  
		 * 
		 * @param TipoMemoria tipoM: define si los registros que vendran por listaDatos son de longitud FIJA o VARIABLE.
		 * @param vector<Dato*> listaDatos: vector que contiene los datos a almacenar en la carga inicial.
		 * 
		 * */
		static RecursoDeAlmacenamiento* recursoArchivoConBuffer_IndiceHash(char *path,TipoMemoria tipoM,  unsigned int tamB,PrimaryKey *PK);
	
};

#endif /*FABRECALMACENAMIENTO_H_*/

